var path = require('path'),
	express = require('express'),
	bodyParser = require('body-parser'),
	cookieParser = require('cookie-parser'),
	//flash = require('connect-flash'),
	//fs = require('fs'),
    compress = require('compression'),
    favicon = require('serve-favicon'),
	session = require('express-session');

var	routes = require('./routes');


var app = express();

app.set('port', (process.env.PORT || 5000));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
//设置gzip压缩，一定要在setStatic之前
//express响应速度会变慢？因为是node压缩的文件？node不擅长运算
app.use(compress());

/**
	cookieParser 的主要参数：cookieParser(secret, options);
	secret：设置后cookieParser 就可以解析（res.cookie('name', user.name, { signed: true });）签名过的cookie了
	options: {path:'', expires: '',maxAge:'' secure:true/false, httpOnly: ''}
	其中 path 为cookie 路径， expires 和maxAge 设置cookie过期时间，expires是UTC格式的时间，maxAge是相对时长
	secure 为ture时， cookie只在HTTPS中有效（HTTPS 是经过SSL协议加密过的HTTP）
	httpOnly 为true时 脚本不能操作cookie,可以避免被xss攻击拿到cookie
 */
app.use(cookieParser());

/**
 	session 的主要参数：
	name: 设置在cookie 中，保存session字段的名称，默认值为connect.sid
	store：session的存储方式，默认存储在内存中（也可存储在cookie/db/缓存redis	中）,推荐存储在缓存中
	secret：通过设置此字符串计算出hash值，放入cookie中 使产生的signedCookie 防篡改
	cookie：存放session_id 的cookie的选项，默认为default: { path: '/', httpOnly: true, secure: false, maxAge: null }
	rolling：每个请求都重新设置一个cookie ，默认为false
	resave：即使session 没有被修改，也保存session的值，默认为true
	saveUninitialized: 强制保存未初始化的session？ , 默认为true
 */
app.use(session({
			secret: 'opssss', 
            saveUninitialized: false,
            resave: true
        }));

app.use(express['static'](path.join(__dirname, 'public'),{
	maxAge:365*3600*1000
}));

//设置favicon
app.use(favicon(__dirname + '/public/imgs/favicon.ico'));

//Error handler
app.use(function(err, req, res, next) {
	if(err){
		console.log(err);
		res.status(500).send('Error:' + err.toString());
	}
});

routes(app);

app.listen(app.get('port'), function(){
	console.log('Server listening at ' + app.get('port'));
});